Sketcher ConstrainSnellsLaw/ru

Скетчер Ограничение преломления (Закон Снеллиуса)

Расположение в меню
Эскиз → Ограничения эскиза → Ограничение преломления (Закон Снеллиуса)
Верстаки
Скетчер
Быстрые клавиши
K W
Представлено в версии
0.15
См. также
Нет

Описание

Инструмент Ограничение преломления (Закон Снеллиуса) ограничивает две линии, чтобы они следовали закону преломления света, когда он проникает через границу раздела двух материалов с разными показателями преломления. Смотри Закон Снеллиуса (англ.), (рус.)

Закон Снеллиуса

Применение

Последовательность щелчков обозначена жёлтыми стрелками с цифрами, n1 и n2 показывают, где находятся показатели преломления

  1. Подготовьте две линии, которые будут представлять луч света, и ребро, которое будет служить границей раздела. Линии должны находиться по разные стороны от границы раздела. В качестве границы раздела могут выступать Линия, Дуга, Окружность или круговым ребром.
  2. Выберите конечную точку первой линии, конечную точку второй линии и ребро раздела. Обратите внимание на порядок выбора конечных точек.
  3. Есть несколько способов вызвать инструмент:
    • Выберите в меню Эскиз → Ограничения эскиза → Ограничение преломления (Закон Снеллиуса).
    • Используйте сочетание клавиш: нажмите K затем сразу нажмите W.
  4. Откроется диалоговое окно Отношение показателей преломления.
  5. Введите Отношение n2/n1. Где n2 - среда, в которой находится вторая выбранная линия, а n1 - среда в которой находится первая линия.
  6. Добавлено ограничение по закону Снеллиуса. При необходимости конечные точки делаются совпадающими и ограничиваются на поверхности раздела. Эти дополнительные ограничения называются вспомогательные ограничения.

Примечания

Написание скриптов

Ограничения можно создавать с помощью макросов и в консоли Python, используя следующие команды:

Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))

где:

  • Sketch - объект эскиза.
  • line1 и pointpos1 - два целых числа, определяющие конечную точку линии в среде с показателем преломления n1. line1 - это индекс линии в эскизе (значение, возвращаемое Sketch.addGeometry), а pointpos1 должен быть равен 1 для начальной точки и 2 для конечной.
  • line2 и pointpos2 - это индексы, определяющие конечную точку второй линии (в среде n2)
  • interface - индекс, указывающий на линию, обозначающую позицию границы между средой n1 и средой n2
  • n2byn1 - число с плавающей точкой, равное отношению показателей преломления n2/n1

На странице Написание скриптов в Скетчер объясняются значения, которые можно использовать для line1, pointpos1, line2, pointpos2 и interface, а также приводятся дополнительные примеры создания ограничений из скриптов Python.

Пример:

import Sketcher
import Part
import FreeCAD

StartPoint = 1
EndPoint = 2

f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")

# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint)) 
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir)) 
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))

App.ActiveDocument.recompute()